const fs = require('fs');
const path  = require('path');

let fp = path.join(__dirname,'test.txt');
let tp = path.join(__dirname,'test1.txt');

// -----异步读取
// fs.readFile(fp, 'utf8', function(err, data){
//     if(err){
//         console.log('读取失败');
//         return;
//     }
//     console.log(data);
// });


// -----同步读取，不指定编码就是读取的 Buffer
// let s = fs.readFileSync(fp, 'utf8');
// console.log(s);

// -----写入
// fs.writeFile(fp, '写入成功：程序员成长指南',{flag: 'a'},function(err){
//     if(err){
//         throw err;
//     }
//     let data = fs.readFileSync(fp, 'utf8');
//     console.log('new Data:');
//     console.log(data);
// })


// -----追加
// fs.appendFile(fp, '新数据成员成长指南', function(err){
//     if(err){
//         throw err;
//     }
//     let data = fs.readFileSync(fp, 'utf8');
//     console.log('append data:');
//     console.log(data);
// })


// -----拷贝文件
// fs.copyFileSync(fp, tp);
// let res = fs.readFileSync(tp, 'utf8');
// console.log('拷贝文件内容：');
// console.log(res);


let delpath = path.join(__dirname,'link.txt');
// -----删除文件
// console.log('开始异步删除');
// fs.unlink(delpath, function(err){
//     if(err) {
//         throw err;
//     }
//     console.log('异步 删除了');
// });

// console.log('开始同步删除');
// -----异步删除
// fs.unlinkSync(path.join(__dirname,'link1.txt'), function(err){
//     if(err) {
//         throw err;
//     }
// });
// console.log('同步删除了');

let buf = Buffer.alloc(6);  //6字节长度
//-----打开文件
// fs.open(fp, 'r', '0666', function(err, fd){
//     console.log('打开文件了，获取到了标识符：'+fd);
//     fs.read(fd,buf,0,3,0, (err,bytesRead, buffer)=>{
//         console.log('bytesRead:');
//         console.log(bytesRead);
//         console.log('buffer:');
//         console.log(buffer);
//         console.log(buffer.toString());
        
//         fs.read(fd,buf,3,3,3, (err,bytesRead, buffer)=>{
//             console.log('bytesRead:');
//             console.log(bytesRead);
//             console.log('buffer:');
//             console.log(buffer);
//             console.log(buffer.toString());
//         });
//     });
// });

// -----创建目录
// fs.mkdir('test', (err)=>{
//     if(err){
//         throw err;
//     }
//     console.log('创建了 test 目录');
// });

// -----删除目录
// fs.rmdir('test', function(err){
//     if(err){
//         throw err;
//     }
//     console.log('删除了 test 目录');
// })

// -----读取目录
// console.log('__dirname:'+__dirname);
// fs.readdir(__dirname, function(err,data){
//     console.log('目录下的所有文件：');
//     console.log(data);
// });

//----文件读取(不指定编码，读取出来的是 buffer)
// fs.readFile(tp, function(err, data){
//     if(err){
//         throw err;
//     }
//     console.log('读取文件：');
//     console.log(data);
// })

// -----拷贝：读取、写入的方式拷贝
let f1 = path.resolve(__dirname, 'test.txt');
fs.readFile(f1, function(err,data){
    console.log('读取文件');
    if(err){
        console.log(err.message);
        return;
    }
    
    let dat = data.toString();
    let f2 = path.resolve(__dirname,'copy.txt')
    fs.writeFile(f2, dat, function(err,dat){
        console.log('写入文件');
        if(err){
            console.log(err.message);
            return;
        }
        console.log('拷贝成功');
    })
});

//-----大文件拷贝


//-----大文件拷贝——流


//-----Error
try{
    throw new Error('hello');
}catch(e){
    console.log('同步异常出现了：');
    console.log(e);
}
try{
    fs.open('tt.txt', 'r', '0666', function(err, data){
        if(err){
            throw err;
        }
        console.log('打开了tt.txt 文件');
    })
}catch(e){
    console.log('异步异常出现了：');
    console.log(e);
}


fs.readdir('xxx', function(err, data){
    if(err){
        throw err;
    }
    console.log('读取xxx目录内容')
})